/* ========================================================================= */
/* ------------------------------------------------------------------------- */
/*!		
  \file			PrpHost.h
  \date			June 2011
  \author		TNick

  \brief		Contains the definition for PrpHost class


 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @n
 Please read ReadMe.txt and Licence.txt in root folder @n
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @n

*/
/* ------------------------------------------------------------------------- */
/* ========================================================================= */
#ifndef __PRPHOST_INC__
#define __PRPHOST_INC__
//
//
//
//
/*  INCLUDES    ------------------------------------------------------------ */

class	PrpAgreg;

/*  INCLUDES    ============================================================ */
//
//
//
//
/*  CLASS    --------------------------------------------------------------- */

/// class that must be inherited by items hosting properties
/**
*	This is a simple interface (abstract class) that describes a common
*	way of accesing internal properties.
*/
class PrpHost		{

	//
	//
	//
	//
	/*  DEFINITIONS    ----------------------------------------------------- */

	/*  DEFINITIONS    ===================================================== */
	//
	//
	//
	//
	/*  DATA    ------------------------------------------------------------ */

private:

	

	/*  DATA    ============================================================ */
	//
	//
	//
	//
	/*  FUNCTIONS    ------------------------------------------------------- */

public:

	/// destructor;
	virtual				~PrpHost		(void) {}

	
	/// tell the number of properties that this item has
	/**
	*	@return		number of properties
	*/
	virtual int			propCount		(void) const { return 0; }

	/// get the list of properties a a list of pointers to PrpAgreg instances
	/**
	*	@return		array allocated using new[]; the ownership of the array
		 passes to caller; may be NULL for memory failures or if the item
		 has no properties
	*/
	virtual PrpAgreg**	propList		(
		int*		p_count	/**< pointer to variable that recives
		the number of elements in the list */
	) const = 0;

	
	/// informs the item about a chnge in properties
	/**
	*	the item must determine inside if it supports this property and,
	*	if it does, shall update it's value. If the item does not support
	*	this feature, it should silently ignore this call.
	*/
	virtual void		propChanged		(
		PrpAgreg*	p_new_val	/**< pointer to changed value */
	) = 0;


	/*  FUNCTIONS    ======================================================= */
	//
	//
	//
	//

};	/*	class PrpHost	*/

/*  CLASS    =============================================================== */
//
//
//
//
#endif // __PRPHOST_INC__
/* ------------------------------------------------------------------------- */
/* ========================================================================= */

